package com.zjsru.plan2025.oneday;

/**
 * 2614. 对角线上的质数
 *
 * @Author: cookLee
 * @Date: 2025-03-18
 */
public class DiagonalPrime {

    /**
     * 主
     * \
     * 如果某个整数大于 1 ，且不存在除 1 和自身之外的正整数因子，则认为该整数是一个质数。
     * 如果存在整数 i ，使得 nums[i][i] = val 或者 nums[i][nums.length - i - 1]= val ，则认为整数 val 位于 nums 的一条对角线上。
     * \
     * 输入：nums = [[1,2,3],[5,6,7],[9,10,11]]
     * 输出：11
     * 解释：数字 1、3、6、9 和 11 是所有 "位于至少一条对角线上" 的数字。由于 11 是最大的质数，故返回 11 。
     * \
     * 输入：nums = [[1,2,3],[5,17,7],[9,11,10]]
     * 输出：17
     * 解释：数字 1、3、9、10 和 17 是所有满足"位于至少一条对角线上"的数字。由于 17 是最大的质数，故返回 17 。
     * \
     *
     * @param args args
     */
    public static void main(String[] args) {
        DiagonalPrime diagonalPrime = new DiagonalPrime();
        int[][] nums = new int[][]{{1, 2, 3}, {5, 6, 7}, {9, 10, 11}};
        System.out.println(diagonalPrime.diagonalPrime(nums));
    }

    public int diagonalPrime(int[][] nums) {
        int ans = 0;
        int len = nums.length;
        for (int i = 0; i < len; i++) {
            //判断对角线
            if (this.helper(nums[i][i])) {
                ans = Math.max(ans, nums[i][i]);
            }
            if (this.helper(nums[i][len - i - 1])) {
                ans = Math.max(ans, nums[i][len - i - 1]);
            }
        }
        return ans;
    }

    private boolean helper(int num) {
        //如果某个整数大于 1 ，且不存在除 1 和自身之外的正整数因子
        if (num == 1) {
            return false;
        }
        for (int i = 2; i * i <= num; i++) {
            if (num % i == 0) {
                return false;
            }
        }
        return true;
    }

}
